共计 3904 个字符,预计需要花费 10 分钟才能阅读完成。
引入
前面 "Python 开发入门" 那一章已经对 python 基本的数据类型进行了大概的描述, 以下我们主要从其内置方法来学习
一. 用途
- 以 key : value 的形式存多个值
- 优点 : 存取都快, 每一个值都有对应的 key
二. 定义方式
- 在 "{}" 内以逗号分隔开多个元素
- 格式为 "key : value", 其中 key 必须为不可变类型, value 可以是任意类型
- 字典类型对应的 "工厂" 就是
dict
dic = {"name" : "shawn","age" : 18}
🍉背后的操作就是
dic = dict(name = "shawn", age = 18)
三. 数据类型转换
res=dict([("k1",1111),("k2",2222),("k3",3333)])
print(res)
res=dict(x=111,y=222,z=333)
print(res)
🍉".fromkeys" 方法在下面 " 需要掌握的方法 " 里详细介绍
res={}.fromkeys(["name","age","gender"],None)
print(res)
四. 常用操作 + 内置方法
🐼优先掌握的操作(***)
1. 按照 key 取值, 可存可取
🍉按 "key" 存一个值
dic = {"name":"shawn"}
dic["age"] = 22
print(dic) #{'name': 'shawn', 'age': 22}
🍉也可以取值, 改值
dic["age"] = 18
dic["name"] = dic["name"].upper()
print(dic) #{'name': 'SHAWN', 'age': 18}
2、长度 : .len()
- 统计的是 key 的个数
- 如果存在 key 相同的键值对, 那么以后入的为主
🍉以 "key" 来决定个数
dic = {"name":"shawn","age":22,"sex":"man"}
print(len(dic)) # 3
🍉有两个 "age", 以后面的为主(就相当于你后面修改了 "age" 的值一样)
dic = {"name":"shawn","age":22,"sex":"man","age":18}
print(dic) #{'name': 'shawn', 'age': 18, 'sex': 'man'}
3. 成员运算 in 和 not in
- 判断是不是字典的 key
dic = {"name":"shawn","age":22,"sex":"man"}
print("name" in dic) #True
print("age" not in dic) #False
4. 删除 del, .pop(), .popitem
- del : 直接删除 "谁", 通用万能删除, 它不支持赋值语法, 赋值会报错
- .pop() : 根据 key 进行删除, 返回的值是 key 对应的 value
- .popitem() : 无参数, 随机删除一个键值, 返回一个元组, 元组里第一个值是 key, 第二个值是对应的 value
🍉"del"
dic = {"name":"shawn","age":22,"sex":"man"}
del dic["name"]
print(dic) #{'age': 22, 'sex': 'man'}
🍉".pop", 会返回删除的 "value"
res = dic.pop('age')
print(res) #22
print(dic) #{'sex': 'man'}
🍉".popitem" 返回的值是元组, ("key", "value")
dic = {"name":"shawn","age":22,"sex":"man"}
res = dic.popitem()
print(res) #('sex', 'man')
print(dic) #{'name': 'shawn', 'age': 22}
5. 取值 : 键 .keys(), 值 .values(), 键值对 .items()
- .keys() : 只取 key
- .values() : 只取 value
- .items() : 既取 key, 又取 value
- 以下加入 for 循环组合使用
dic = {"name":"shawn","age":22,"sex":"man"}
🍉".keys()"
list=[]
print(dic.keys()) #dict_keys(['name', 'age', 'sex'])
for k in dic.keys():
list.append(k)
print(list) #['name', 'age', 'sex']
🍉".values()"
list2 = []
print(dic.values()) #dict_values(['shawn', 22, 'man'])
for v in dic.values():
list2.append(v)
print(list2) #['shawn', 22, 'man']
🍉".items()"
l1 = []; l2 = []
print(dic.items()) #dict_items([('name', 'shawn'), ('age', 22), ('sex', 'man')])
for k,v in dic.items():
l1.append(k)
l2.append(v)
print(l1) #['name', 'age', 'sex']
print(l2) #['shawn', 22, 'man']
ps : Python2 当中的 键 .keys(), 值 .values(), 键值对 .items() 直接是列表输出的结果,比较占空间,而 Python3 中像是一只老母鸡,想要就取一个
🍉"Python2" 中的字典取值
>>> dic = {"name":"shawn","age":22,"sex":"man"}
>>>
>>> dic.keys()
['name', 'age', 'sex']
>>>
>>> dic.values()
['shawn', 22, 'man']
>>>
>>> dic.items()
[('name', 'shawn'), ('age', 22), ('sex', 'man')]
6. 取值 .get() --->(寻找)
- 上面提到可以使用 "dic[key]" 这种方式取值, 但找不到会报错
- .get() : 参数为 key, 找不到返回 None, 容错性更好
dic = {"name":"shawn","age":22,"sex":"man"}
🍉"dic[key]" 找不到报错
res = dic["xxxx"]
print(res) #报错
🍉".get()" 找到返回 "value", 找不到返回 "None"
res = dic.get("name")
print(res) #shawn
res = dic.get("xxxx")
print(res) #None
🐨需要掌握的操作(****)
1. 更新 .update()
- 更新就是键值对的修改或增加
- 就像一个软件, 新版本是在旧版本的基础上 修改 BUG 或者 增加功能
- 对与老字典来说,更新指的是 : 新字典中有而老字典中没有则添加,新有而老也有则覆盖
dic = {"name":"shawn","age":22}
🍉修改了 "age", 增加了 "sex"
res = dic.update({"age":18,"sex":"man"})
print(dic) #{'name': 'shawn', 'age': 18, 'sex': 'man'}
2. 清空 .clear()
dic = {"name":"shawn","age":22,"sex":"man"}
dic.clear()
print(dic) #{}
3. 初始化 (造) 一个字典模板 .fromkeys()
- 前一个参数是 key, 后一个参数是 value
- 语法:
{}.fromkeys(['name','age','sex'],'xxxxxx')
🍉不使用 ".fromkeys" 建模板
good_info={
'name':None,
'price':None,
'count':None
}
🍉使用 ".fromkeys()" 建模板
dic = {}.fromkeys(['name','age','sex'],None)
print(dic) #{'name':None,'age':None,'sex':None}
- 示例
🐳使用 "for" 循环
list1=['name','price','count']
dic={}
for x in list1:
dic[x]=None
print(dic) #{'name': None, 'price': None, 'count': None}
🐳使用 ".fromkeys()" 直接实现
dic = {}.fromkeys(list1,None)
print(dic) #{'name': None, 'price': None, 'count': None}
🍉加入商品信息
'mac' 20000 10 #商品信息
dic['name']='mac' #将商品信息加入到模板中
dic['price']=20000 #价格
dic['count']=10 #个数
4. 添加并返回值 .setdefaul()
- 如果字典里有要添加的 key, 则不修改, 并返回 key 对应的 原 value
- 如果字典里没有要添加的 key, 则添加, 并返回添加的 key 对应的 新 value
🍉添加存在的 "key"
dic={'name':'shawn','age':22}
res=dic.setdefault('name','SHAWN')
print('返回值:',res) #返回值: shawn
print(dic) #{'name': 'shawn', 'age': 22}
🍉添加不存在的 "key"
res=dic.setdefault('sex','man')
print('返回值:',res) #返回值: man
print(dic) #{'name': 'shawn', 'age': 22, 'sex': 'man'}
五. 总结
-
可以存多个值
-
无序, 取值是按 "key" 取对应的 "value"
-
可变类型 ---> 不可 hash 类型
正文完